home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / WarpQuake / Src / server.h < prev    next >
C/C++ Source or Header  |  2000-05-22  |  7KB  |  258 lines

  1. /*
  2. Copyright (C) 1996-1997 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20. // server.h
  21.  
  22. typedef struct
  23. {
  24.     int            maxclients;
  25.     int            maxclientslimit;
  26.     struct client_s    *clients;        // [maxclients]
  27.     int            serverflags;        // episode completion information
  28.     qboolean    changelevel_issued;    // cleared when at SV_SpawnServer
  29. } server_static_t;
  30.  
  31. //=============================================================================
  32.  
  33. typedef enum {ss_loading, ss_active} server_state_t;
  34.  
  35. typedef struct
  36. {
  37.     qboolean    active;                // false if only a net client
  38.  
  39.     qboolean    paused;
  40.     qboolean    loadgame;            // handle connections specially
  41.  
  42.     double        time;
  43.     
  44.     int            lastcheck;            // used by PF_checkclient
  45.     double        lastchecktime;
  46.     
  47.     char        name[64];            // map name
  48. #ifdef QUAKE2
  49.     char        startspot[64];
  50. #endif
  51.     char        modelname[64];        // maps/<name>.bsp, for model_precache[0]
  52.     struct model_s     *worldmodel;
  53.     char        *model_precache[MAX_MODELS];    // NULL terminated
  54.     struct model_s    *models[MAX_MODELS];
  55.     char        *sound_precache[MAX_SOUNDS];    // NULL terminated
  56.     char        *lightstyles[MAX_LIGHTSTYLES];
  57.     int            num_edicts;
  58.     int            max_edicts;
  59.     edict_t        *edicts;            // can NOT be array indexed, because
  60.                                     // edict_t is variable sized, but can
  61.                                     // be used to reference the world ent
  62.     server_state_t    state;            // some actions are only valid during load
  63.  
  64.     sizebuf_t    datagram;
  65.     byte        datagram_buf[MAX_DATAGRAM];
  66.  
  67.     sizebuf_t    reliable_datagram;    // copied to all clients at end of frame
  68.     byte        reliable_datagram_buf[MAX_DATAGRAM];
  69.  
  70.     sizebuf_t    signon;
  71.     byte        signon_buf[8192];
  72. } server_t;
  73.  
  74.  
  75. #define    NUM_PING_TIMES        16
  76. #define    NUM_SPAWN_PARMS        16
  77.  
  78. typedef struct client_s
  79. {
  80.     qboolean        active;                // false = client is free
  81.     qboolean        spawned;            // false = don't send datagrams
  82.     qboolean        dropasap;            // has been told to go to another level
  83.     qboolean        privileged;            // can execute any host command
  84.     qboolean        sendsignon;            // only valid before spawned
  85.  
  86.     double            last_message;        // reliable messages must be sent
  87.                                         // periodically
  88.  
  89.     struct qsocket_s *netconnection;    // communications handle
  90.  
  91.     usercmd_t        cmd;                // movement
  92.     vec3_t            wishdir;            // intended motion calced from cmd
  93.  
  94.     sizebuf_t        message;            // can be added to at any time,
  95.                                         // copied and clear once per frame
  96.     byte            msgbuf[MAX_MSGLEN];
  97.     edict_t            *edict;                // EDICT_NUM(clientnum+1)
  98.     char            name[32];            // for printing to other people
  99.     int                colors;
  100.         
  101.     float            ping_times[NUM_PING_TIMES];
  102.     int                num_pings;            // ping_times[num_pings%NUM_PING_TIMES]
  103.  
  104. // spawn parms are carried from level to level
  105.     float            spawn_parms[NUM_SPAWN_PARMS];
  106.  
  107. // client known data for deltas    
  108.     int                old_frags;
  109. } client_t;
  110.  
  111.  
  112. //=============================================================================
  113.  
  114. // edict->movetype values
  115. #define    MOVETYPE_NONE            0        // never moves
  116. #define    MOVETYPE_ANGLENOCLIP    1
  117. #define    MOVETYPE_ANGLECLIP        2
  118. #define    MOVETYPE_WALK            3        // gravity
  119. #define    MOVETYPE_STEP            4        // gravity, special edge handling
  120. #define    MOVETYPE_FLY            5
  121. #define    MOVETYPE_TOSS            6        // gravity
  122. #define    MOVETYPE_PUSH            7        // no clip to world, push and crush
  123. #define    MOVETYPE_NOCLIP            8
  124. #define    MOVETYPE_FLYMISSILE        9        // extra size to monsters
  125. #define    MOVETYPE_BOUNCE            10
  126. #ifdef QUAKE2
  127. #define MOVETYPE_BOUNCEMISSILE    11        // bounce w/o gravity
  128. #define MOVETYPE_FOLLOW            12        // track movement of aiment
  129. #endif
  130.  
  131. // edict->solid values
  132. #define    SOLID_NOT                0        // no interaction with other objects
  133. #define    SOLID_TRIGGER            1        // touch on edge, but not blocking
  134. #define    SOLID_BBOX                2        // touch on edge, block
  135. #define    SOLID_SLIDEBOX            3        // touch on edge, but not an onground
  136. #define    SOLID_BSP                4        // bsp clip, touch on edge, block
  137.  
  138. // edict->deadflag values
  139. #define    DEAD_NO                    0
  140. #define    DEAD_DYING                1
  141. #define    DEAD_DEAD                2
  142.  
  143. #define    DAMAGE_NO                0
  144. #define    DAMAGE_YES                1
  145. #define    DAMAGE_AIM                2
  146.  
  147. // edict->flags
  148. #define    FL_FLY                    1
  149. #define    FL_SWIM                    2
  150. //#define    FL_GLIMPSE                4
  151. #define    FL_CONVEYOR                4
  152. #define    FL_CLIENT                8
  153. #define    FL_INWATER                16
  154. #define    FL_MONSTER                32
  155. #define    FL_GODMODE                64
  156. #define    FL_NOTARGET                128
  157. #define    FL_ITEM                    256
  158. #define    FL_ONGROUND                512
  159. #define    FL_PARTIALGROUND        1024    // not all corners are valid
  160. #define    FL_WATERJUMP            2048    // player jumping out of water
  161. #define    FL_JUMPRELEASED            4096    // for jump debouncing
  162. #ifdef QUAKE2
  163. #define FL_FLASHLIGHT            8192
  164. #define FL_ARCHIVE_OVERRIDE        1048576
  165. #endif
  166.  
  167. // entity effects
  168.  
  169. #define    EF_BRIGHTFIELD            1
  170. #define    EF_MUZZLEFLASH             2
  171. #define    EF_BRIGHTLIGHT             4
  172. #define    EF_DIMLIGHT             8
  173. #ifdef QUAKE2
  174. #define EF_DARKLIGHT            16
  175. #define EF_DARKFIELD            32
  176. #define EF_LIGHT                64
  177. #define EF_NODRAW                128
  178. #endif
  179.  
  180. #define    SPAWNFLAG_NOT_EASY            256
  181. #define    SPAWNFLAG_NOT_MEDIUM        512
  182. #define    SPAWNFLAG_NOT_HARD            1024
  183. #define    SPAWNFLAG_NOT_DEATHMATCH    2048
  184.  
  185. #ifdef QUAKE2
  186. // server flags
  187. #define    SFL_EPISODE_1        1
  188. #define    SFL_EPISODE_2        2
  189. #define    SFL_EPISODE_3        4
  190. #define    SFL_EPISODE_4        8
  191. #define    SFL_NEW_UNIT        16
  192. #define    SFL_NEW_EPISODE        32
  193. #define    SFL_CROSS_TRIGGERS    65280
  194. #endif
  195.  
  196. //============================================================================
  197.  
  198. extern    cvar_t    teamplay;
  199. extern    cvar_t    skill;
  200. extern    cvar_t    deathmatch;
  201. extern    cvar_t    coop;
  202. extern    cvar_t    fraglimit;
  203. extern    cvar_t    timelimit;
  204.  
  205. extern    server_static_t    svs;                // persistant server info
  206. extern    server_t        sv;                    // local server
  207.  
  208. extern    client_t    *host_client;
  209.  
  210. extern    jmp_buf     host_abortserver;
  211.  
  212. extern    double        host_time;
  213.  
  214. extern    edict_t        *sv_player;
  215.  
  216. //===========================================================
  217.  
  218. void SV_Init (void);
  219.  
  220. void SV_StartParticle (vec3_t org, vec3_t dir, int color, int count);
  221. void SV_StartSound (edict_t *entity, int channel, char *sample, int volume,
  222.     float attenuation);
  223.  
  224. void SV_DropClient (qboolean crash);
  225.  
  226. void SV_SendClientMessages (void);
  227. void SV_ClearDatagram (void);
  228.  
  229. int SV_ModelIndex (char *name);
  230.  
  231. void SV_SetIdealPitch (void);
  232.  
  233. void SV_AddUpdates (void);
  234.  
  235. void SV_ClientThink (void);
  236. void SV_AddClientToServer (struct qsocket_s    *ret);
  237.  
  238. void SV_ClientPrintf (char *fmt, ...);
  239. void SV_BroadcastPrintf (char *fmt, ...);
  240.  
  241. void SV_Physics (void);
  242.  
  243. qboolean SV_CheckBottom (edict_t *ent);
  244. qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink);
  245.  
  246. void SV_WriteClientdataToMessage (edict_t *ent, sizebuf_t *msg);
  247.  
  248. void SV_MoveToGoal (void);
  249.  
  250. void SV_CheckForNewClients (void);
  251. void SV_RunClients (void);
  252. void SV_SaveSpawnparms ();
  253. #ifdef QUAKE2
  254. void SV_SpawnServer (char *server, char *startspot);
  255. #else
  256. void SV_SpawnServer (char *server);
  257. #endif
  258.